package helper

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"time"
)

var Db *gorm.DB

func InitMysql() {
	host := Configer.GetString("mysql.host")
	port := Configer.GetString("mysql.port")
	user := Configer.GetString("mysql.user")
	passwd := Configer.GetString("mysql.password")
	dbname := Configer.GetString("mysql.dbname")
	charset := Configer.GetString("mysql.charset")
	prefix := Configer.GetString("mysql.prefix")

	dsn := user + ":" + passwd + "@tcp(" + host + ":" + port + ")/" + dbname + "?charset=" + charset + "&parseTime=True&loc=Local"
	fmt.Println(" ==== InitMysql::dsn ===> " + dsn)

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix: prefix, // table name prefix, table for `User` would be `t_users`
			// 单数表名
			SingularTable: true,
		},
		// 关闭默认事务
		// SkipDefaultTransaction: true,
	})
	if err != nil {
		panic("初始化 MySql 失败：" + err.Error())
	}
	Db = db

	if sqlDb, err := Db.DB(); err != nil {
		panic("初始化 MySql 失败：" + err.Error())
	} else {
		// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
		sqlDb.SetMaxIdleConns(10)
		// SetMaxOpenConns 设置打开数据库连接的最大数量。
		sqlDb.SetMaxOpenConns(500)
		// SetConnMaxLifetime 设置了连接可复用的最大时间。
		sqlDb.SetConnMaxLifetime(time.Hour)
	}
}
